{
  "nbformat": 4,
  "nbformat_minor": 0,
  "metadata": {
    "colab": {
      "name": "Fine-tune TrOCR on IAM Handwriting Database using native PyTorch.ipynb",
      "provenance": [],
      "collapsed_sections": [],
      "mount_file_id": "1ZNLaSZ1M_cDG3iv15WZYGMJIGQ-kAFCe",
      "authorship_tag": "ABX9TyOoDDIKoyzSOKamjrBZtGNt",
      "include_colab_link": true
    },
    "kernelspec": {
      "name": "python3",
      "display_name": "Python 3"
    },
    "language_info": {
      "name": "python"
    },
    "accelerator": "GPU",
    "widgets": {
      "application/vnd.jupyter.widget-state+json": {
        "e4297a2c10e846b7a8dd67a0e675bc27": {
          "model_module": "@jupyter-widgets/controls",
          "model_name": "HBoxModel",
          "model_module_version": "1.5.0",
          "state": {
            "_view_name": "HBoxView",
            "_dom_classes": [],
            "_model_name": "HBoxModel",
            "_view_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_view_count": null,
            "_view_module_version": "1.5.0",
            "box_style": "",
            "layout": "IPY_MODEL_a8c51dcfcd0e446b9e637a75cc6f1f4a",
            "_model_module": "@jupyter-widgets/controls",
            "children": [
              "IPY_MODEL_530908dd92ce4fcc8ad0e4a3872018fd",
              "IPY_MODEL_77ad0e900327449bbd84fa13ab836cb8",
              "IPY_MODEL_3db97545836b48c7861c49e180120f2d"
            ]
          }
        },
        "a8c51dcfcd0e446b9e637a75cc6f1f4a": {
          "model_module": "@jupyter-widgets/base",
          "model_name": "LayoutModel",
          "model_module_version": "1.2.0",
          "state": {
            "_view_name": "LayoutView",
            "grid_template_rows": null,
            "right": null,
            "justify_content": null,
            "_view_module": "@jupyter-widgets/base",
            "overflow": null,
            "_model_module_version": "1.2.0",
            "_view_count": null,
            "flex_flow": null,
            "width": null,
            "min_width": null,
            "border": null,
            "align_items": null,
            "bottom": null,
            "_model_module": "@jupyter-widgets/base",
            "top": null,
            "grid_column": null,
            "overflow_y": null,
            "overflow_x": null,
            "grid_auto_flow": null,
            "grid_area": null,
            "grid_template_columns": null,
            "flex": null,
            "_model_name": "LayoutModel",
            "justify_items": null,
            "grid_row": null,
            "max_height": null,
            "align_content": null,
            "visibility": null,
            "align_self": null,
            "height": null,
            "min_height": null,
            "padding": null,
            "grid_auto_rows": null,
            "grid_gap": null,
            "max_width": null,
            "order": null,
            "_view_module_version": "1.2.0",
            "grid_template_areas": null,
            "object_position": null,
            "object_fit": null,
            "grid_auto_columns": null,
            "margin": null,
            "display": null,
            "left": null
          }
        },
        "530908dd92ce4fcc8ad0e4a3872018fd": {
          "model_module": "@jupyter-widgets/controls",
          "model_name": "HTMLModel",
          "model_module_version": "1.5.0",
          "state": {
            "_view_name": "HTMLView",
            "style": "IPY_MODEL_fd851d6769c94ffba7824e7022edb5af",
            "_dom_classes": [],
            "description": "",
            "_model_name": "HTMLModel",
            "placeholder": "​",
            "_view_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "value": "100%",
            "_view_count": null,
            "_view_module_version": "1.5.0",
            "description_tooltip": null,
            "_model_module": "@jupyter-widgets/controls",
            "layout": "IPY_MODEL_ff3d0c0258bf430895a70e590491ee8b"
          }
        },
        "77ad0e900327449bbd84fa13ab836cb8": {
          "model_module": "@jupyter-widgets/controls",
          "model_name": "FloatProgressModel",
          "model_module_version": "1.5.0",
          "state": {
            "_view_name": "ProgressView",
            "style": "IPY_MODEL_0aacf74aaf85475aaae9e399755b493b",
            "_dom_classes": [],
            "description": "",
            "_model_name": "FloatProgressModel",
            "bar_style": "success",
            "max": 146,
            "_view_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "value": 146,
            "_view_count": null,
            "_view_module_version": "1.5.0",
            "orientation": "horizontal",
            "min": 0,
            "description_tooltip": null,
            "_model_module": "@jupyter-widgets/controls",
            "layout": "IPY_MODEL_937ac0758b1d43918504dbd21dc240e4"
          }
        },
        "3db97545836b48c7861c49e180120f2d": {
          "model_module": "@jupyter-widgets/controls",
          "model_name": "HTMLModel",
          "model_module_version": "1.5.0",
          "state": {
            "_view_name": "HTMLView",
            "style": "IPY_MODEL_c5b9f7d529194837a2b39d68b28fcf1c",
            "_dom_classes": [],
            "description": "",
            "_model_name": "HTMLModel",
            "placeholder": "​",
            "_view_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "value": " 146/146 [07:31&lt;00:00,  2.81s/it]",
            "_view_count": null,
            "_view_module_version": "1.5.0",
            "description_tooltip": null,
            "_model_module": "@jupyter-widgets/controls",
            "layout": "IPY_MODEL_ba707c27af6d42d3a172135ccb884a0c"
          }
        },
        "fd851d6769c94ffba7824e7022edb5af": {
          "model_module": "@jupyter-widgets/controls",
          "model_name": "DescriptionStyleModel",
          "model_module_version": "1.5.0",
          "state": {
            "_view_name": "StyleView",
            "_model_name": "DescriptionStyleModel",
            "description_width": "",
            "_view_module": "@jupyter-widgets/base",
            "_model_module_version": "1.5.0",
            "_view_count": null,
            "_view_module_version": "1.2.0",
            "_model_module": "@jupyter-widgets/controls"
          }
        },
        "ff3d0c0258bf430895a70e590491ee8b": {
          "model_module": "@jupyter-widgets/base",
          "model_name": "LayoutModel",
          "model_module_version": "1.2.0",
          "state": {
            "_view_name": "LayoutView",
            "grid_template_rows": null,
            "right": null,
            "justify_content": null,
            "_view_module": "@jupyter-widgets/base",
            "overflow": null,
            "_model_module_version": "1.2.0",
            "_view_count": null,
            "flex_flow": null,
            "width": null,
            "min_width": null,
            "border": null,
            "align_items": null,
            "bottom": null,
            "_model_module": "@jupyter-widgets/base",
            "top": null,
            "grid_column": null,
            "overflow_y": null,
            "overflow_x": null,
            "grid_auto_flow": null,
            "grid_area": null,
            "grid_template_columns": null,
            "flex": null,
            "_model_name": "LayoutModel",
            "justify_items": null,
            "grid_row": null,
            "max_height": null,
            "align_content": null,
            "visibility": null,
            "align_self": null,
            "height": null,
            "min_height": null,
            "padding": null,
            "grid_auto_rows": null,
            "grid_gap": null,
            "max_width": null,
            "order": null,
            "_view_module_version": "1.2.0",
            "grid_template_areas": null,
            "object_position": null,
            "object_fit": null,
            "grid_auto_columns": null,
            "margin": null,
            "display": null,
            "left": null
          }
        },
        "0aacf74aaf85475aaae9e399755b493b": {
          "model_module": "@jupyter-widgets/controls",
          "model_name": "ProgressStyleModel",
          "model_module_version": "1.5.0",
          "state": {
            "_view_name": "StyleView",
            "_model_name": "ProgressStyleModel",
            "description_width": "",
            "_view_module": "@jupyter-widgets/base",
            "_model_module_version": "1.5.0",
            "_view_count": null,
            "_view_module_version": "1.2.0",
            "bar_color": null,
            "_model_module": "@jupyter-widgets/controls"
          }
        },
        "937ac0758b1d43918504dbd21dc240e4": {
          "model_module": "@jupyter-widgets/base",
          "model_name": "LayoutModel",
          "model_module_version": "1.2.0",
          "state": {
            "_view_name": "LayoutView",
            "grid_template_rows": null,
            "right": null,
            "justify_content": null,
            "_view_module": "@jupyter-widgets/base",
            "overflow": null,
            "_model_module_version": "1.2.0",
            "_view_count": null,
            "flex_flow": null,
            "width": null,
            "min_width": null,
            "border": null,
            "align_items": null,
            "bottom": null,
            "_model_module": "@jupyter-widgets/base",
            "top": null,
            "grid_column": null,
            "overflow_y": null,
            "overflow_x": null,
            "grid_auto_flow": null,
            "grid_area": null,
            "grid_template_columns": null,
            "flex": null,
            "_model_name": "LayoutModel",
            "justify_items": null,
            "grid_row": null,
            "max_height": null,
            "align_content": null,
            "visibility": null,
            "align_self": null,
            "height": null,
            "min_height": null,
            "padding": null,
            "grid_auto_rows": null,
            "grid_gap": null,
            "max_width": null,
            "order": null,
            "_view_module_version": "1.2.0",
            "grid_template_areas": null,
            "object_position": null,
            "object_fit": null,
            "grid_auto_columns": null,
            "margin": null,
            "display": null,
            "left": null
          }
        },
        "c5b9f7d529194837a2b39d68b28fcf1c": {
          "model_module": "@jupyter-widgets/controls",
          "model_name": "DescriptionStyleModel",
          "model_module_version": "1.5.0",
          "state": {
            "_view_name": "StyleView",
            "_model_name": "DescriptionStyleModel",
            "description_width": "",
            "_view_module": "@jupyter-widgets/base",
            "_model_module_version": "1.5.0",
            "_view_count": null,
            "_view_module_version": "1.2.0",
            "_model_module": "@jupyter-widgets/controls"
          }
        },
        "ba707c27af6d42d3a172135ccb884a0c": {
          "model_module": "@jupyter-widgets/base",
          "model_name": "LayoutModel",
          "model_module_version": "1.2.0",
          "state": {
            "_view_name": "LayoutView",
            "grid_template_rows": null,
            "right": null,
            "justify_content": null,
            "_view_module": "@jupyter-widgets/base",
            "overflow": null,
            "_model_module_version": "1.2.0",
            "_view_count": null,
            "flex_flow": null,
            "width": null,
            "min_width": null,
            "border": null,
            "align_items": null,
            "bottom": null,
            "_model_module": "@jupyter-widgets/base",
            "top": null,
            "grid_column": null,
            "overflow_y": null,
            "overflow_x": null,
            "grid_auto_flow": null,
            "grid_area": null,
            "grid_template_columns": null,
            "flex": null,
            "_model_name": "LayoutModel",
            "justify_items": null,
            "grid_row": null,
            "max_height": null,
            "align_content": null,
            "visibility": null,
            "align_self": null,
            "height": null,
            "min_height": null,
            "padding": null,
            "grid_auto_rows": null,
            "grid_gap": null,
            "max_width": null,
            "order": null,
            "_view_module_version": "1.2.0",
            "grid_template_areas": null,
            "object_position": null,
            "object_fit": null,
            "grid_auto_columns": null,
            "margin": null,
            "display": null,
            "left": null
          }
        },
        "fe52ce398c58473d9c759e2d7c7de88a": {
          "model_module": "@jupyter-widgets/controls",
          "model_name": "HBoxModel",
          "model_module_version": "1.5.0",
          "state": {
            "_view_name": "HBoxView",
            "_dom_classes": [],
            "_model_name": "HBoxModel",
            "_view_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_view_count": null,
            "_view_module_version": "1.5.0",
            "box_style": "",
            "layout": "IPY_MODEL_735997f4f6c3410498238e96ae319a7a",
            "_model_module": "@jupyter-widgets/controls",
            "children": [
              "IPY_MODEL_822b7c76a120459793c167a3452e1609",
              "IPY_MODEL_58d748c254684d91a815c2b681ec8f27",
              "IPY_MODEL_1127b972710143dbb7f697721c6cd345"
            ]
          }
        },
        "735997f4f6c3410498238e96ae319a7a": {
          "model_module": "@jupyter-widgets/base",
          "model_name": "LayoutModel",
          "model_module_version": "1.2.0",
          "state": {
            "_view_name": "LayoutView",
            "grid_template_rows": null,
            "right": null,
            "justify_content": null,
            "_view_module": "@jupyter-widgets/base",
            "overflow": null,
            "_model_module_version": "1.2.0",
            "_view_count": null,
            "flex_flow": null,
            "width": null,
            "min_width": null,
            "border": null,
            "align_items": null,
            "bottom": null,
            "_model_module": "@jupyter-widgets/base",
            "top": null,
            "grid_column": null,
            "overflow_y": null,
            "overflow_x": null,
            "grid_auto_flow": null,
            "grid_area": null,
            "grid_template_columns": null,
            "flex": null,
            "_model_name": "LayoutModel",
            "justify_items": null,
            "grid_row": null,
            "max_height": null,
            "align_content": null,
            "visibility": null,
            "align_self": null,
            "height": null,
            "min_height": null,
            "padding": null,
            "grid_auto_rows": null,
            "grid_gap": null,
            "max_width": null,
            "order": null,
            "_view_module_version": "1.2.0",
            "grid_template_areas": null,
            "object_position": null,
            "object_fit": null,
            "grid_auto_columns": null,
            "margin": null,
            "display": null,
            "left": null
          }
        },
        "822b7c76a120459793c167a3452e1609": {
          "model_module": "@jupyter-widgets/controls",
          "model_name": "HTMLModel",
          "model_module_version": "1.5.0",
          "state": {
            "_view_name": "HTMLView",
            "style": "IPY_MODEL_dff31a75d9fb4398b9238653a76b34ed",
            "_dom_classes": [],
            "description": "",
            "_model_name": "HTMLModel",
            "placeholder": "​",
            "_view_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "value": " 11%",
            "_view_count": null,
            "_view_module_version": "1.5.0",
            "description_tooltip": null,
            "_model_module": "@jupyter-widgets/controls",
            "layout": "IPY_MODEL_6ee36118724f47d499c2e3467631ec42"
          }
        },
        "58d748c254684d91a815c2b681ec8f27": {
          "model_module": "@jupyter-widgets/controls",
          "model_name": "FloatProgressModel",
          "model_module_version": "1.5.0",
          "state": {
            "_view_name": "ProgressView",
            "style": "IPY_MODEL_ba2b94d5a0d747f0ac7a6bcd55f3b25a",
            "_dom_classes": [],
            "description": "",
            "_model_name": "FloatProgressModel",
            "bar_style": "danger",
            "max": 146,
            "_view_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "value": 16,
            "_view_count": null,
            "_view_module_version": "1.5.0",
            "orientation": "horizontal",
            "min": 0,
            "description_tooltip": null,
            "_model_module": "@jupyter-widgets/controls",
            "layout": "IPY_MODEL_194bb6c1b1364fd9a548e64d138c6b15"
          }
        },
        "1127b972710143dbb7f697721c6cd345": {
          "model_module": "@jupyter-widgets/controls",
          "model_name": "HTMLModel",
          "model_module_version": "1.5.0",
          "state": {
            "_view_name": "HTMLView",
            "style": "IPY_MODEL_e2cbf6c7fca54b29b0adee917b52faa1",
            "_dom_classes": [],
            "description": "",
            "_model_name": "HTMLModel",
            "placeholder": "​",
            "_view_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "value": " 16/146 [00:27&lt;03:25,  1.58s/it]",
            "_view_count": null,
            "_view_module_version": "1.5.0",
            "description_tooltip": null,
            "_model_module": "@jupyter-widgets/controls",
            "layout": "IPY_MODEL_36eae5bf2ad04abcbf29115102d4b182"
          }
        },
        "dff31a75d9fb4398b9238653a76b34ed": {
          "model_module": "@jupyter-widgets/controls",
          "model_name": "DescriptionStyleModel",
          "model_module_version": "1.5.0",
          "state": {
            "_view_name": "StyleView",
            "_model_name": "DescriptionStyleModel",
            "description_width": "",
            "_view_module": "@jupyter-widgets/base",
            "_model_module_version": "1.5.0",
            "_view_count": null,
            "_view_module_version": "1.2.0",
            "_model_module": "@jupyter-widgets/controls"
          }
        },
        "6ee36118724f47d499c2e3467631ec42": {
          "model_module": "@jupyter-widgets/base",
          "model_name": "LayoutModel",
          "model_module_version": "1.2.0",
          "state": {
            "_view_name": "LayoutView",
            "grid_template_rows": null,
            "right": null,
            "justify_content": null,
            "_view_module": "@jupyter-widgets/base",
            "overflow": null,
            "_model_module_version": "1.2.0",
            "_view_count": null,
            "flex_flow": null,
            "width": null,
            "min_width": null,
            "border": null,
            "align_items": null,
            "bottom": null,
            "_model_module": "@jupyter-widgets/base",
            "top": null,
            "grid_column": null,
            "overflow_y": null,
            "overflow_x": null,
            "grid_auto_flow": null,
            "grid_area": null,
            "grid_template_columns": null,
            "flex": null,
            "_model_name": "LayoutModel",
            "justify_items": null,
            "grid_row": null,
            "max_height": null,
            "align_content": null,
            "visibility": null,
            "align_self": null,
            "height": null,
            "min_height": null,
            "padding": null,
            "grid_auto_rows": null,
            "grid_gap": null,
            "max_width": null,
            "order": null,
            "_view_module_version": "1.2.0",
            "grid_template_areas": null,
            "object_position": null,
            "object_fit": null,
            "grid_auto_columns": null,
            "margin": null,
            "display": null,
            "left": null
          }
        },
        "ba2b94d5a0d747f0ac7a6bcd55f3b25a": {
          "model_module": "@jupyter-widgets/controls",
          "model_name": "ProgressStyleModel",
          "model_module_version": "1.5.0",
          "state": {
            "_view_name": "StyleView",
            "_model_name": "ProgressStyleModel",
            "description_width": "",
            "_view_module": "@jupyter-widgets/base",
            "_model_module_version": "1.5.0",
            "_view_count": null,
            "_view_module_version": "1.2.0",
            "bar_color": null,
            "_model_module": "@jupyter-widgets/controls"
          }
        },
        "194bb6c1b1364fd9a548e64d138c6b15": {
          "model_module": "@jupyter-widgets/base",
          "model_name": "LayoutModel",
          "model_module_version": "1.2.0",
          "state": {
            "_view_name": "LayoutView",
            "grid_template_rows": null,
            "right": null,
            "justify_content": null,
            "_view_module": "@jupyter-widgets/base",
            "overflow": null,
            "_model_module_version": "1.2.0",
            "_view_count": null,
            "flex_flow": null,
            "width": null,
            "min_width": null,
            "border": null,
            "align_items": null,
            "bottom": null,
            "_model_module": "@jupyter-widgets/base",
            "top": null,
            "grid_column": null,
            "overflow_y": null,
            "overflow_x": null,
            "grid_auto_flow": null,
            "grid_area": null,
            "grid_template_columns": null,
            "flex": null,
            "_model_name": "LayoutModel",
            "justify_items": null,
            "grid_row": null,
            "max_height": null,
            "align_content": null,
            "visibility": null,
            "align_self": null,
            "height": null,
            "min_height": null,
            "padding": null,
            "grid_auto_rows": null,
            "grid_gap": null,
            "max_width": null,
            "order": null,
            "_view_module_version": "1.2.0",
            "grid_template_areas": null,
            "object_position": null,
            "object_fit": null,
            "grid_auto_columns": null,
            "margin": null,
            "display": null,
            "left": null
          }
        },
        "e2cbf6c7fca54b29b0adee917b52faa1": {
          "model_module": "@jupyter-widgets/controls",
          "model_name": "DescriptionStyleModel",
          "model_module_version": "1.5.0",
          "state": {
            "_view_name": "StyleView",
            "_model_name": "DescriptionStyleModel",
            "description_width": "",
            "_view_module": "@jupyter-widgets/base",
            "_model_module_version": "1.5.0",
            "_view_count": null,
            "_view_module_version": "1.2.0",
            "_model_module": "@jupyter-widgets/controls"
          }
        },
        "36eae5bf2ad04abcbf29115102d4b182": {
          "model_module": "@jupyter-widgets/base",
          "model_name": "LayoutModel",
          "model_module_version": "1.2.0",
          "state": {
            "_view_name": "LayoutView",
            "grid_template_rows": null,
            "right": null,
            "justify_content": null,
            "_view_module": "@jupyter-widgets/base",
            "overflow": null,
            "_model_module_version": "1.2.0",
            "_view_count": null,
            "flex_flow": null,
            "width": null,
            "min_width": null,
            "border": null,
            "align_items": null,
            "bottom": null,
            "_model_module": "@jupyter-widgets/base",
            "top": null,
            "grid_column": null,
            "overflow_y": null,
            "overflow_x": null,
            "grid_auto_flow": null,
            "grid_area": null,
            "grid_template_columns": null,
            "flex": null,
            "_model_name": "LayoutModel",
            "justify_items": null,
            "grid_row": null,
            "max_height": null,
            "align_content": null,
            "visibility": null,
            "align_self": null,
            "height": null,
            "min_height": null,
            "padding": null,
            "grid_auto_rows": null,
            "grid_gap": null,
            "max_width": null,
            "order": null,
            "_view_module_version": "1.2.0",
            "grid_template_areas": null,
            "object_position": null,
            "object_fit": null,
            "grid_auto_columns": null,
            "margin": null,
            "display": null,
            "left": null
          }
        }
      }
    }
  },
  "cells": [
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "view-in-github",
        "colab_type": "text"
      },
      "source": [
        "<a href=\"https://colab.research.google.com/github/NielsRogge/Transformers-Tutorials/blob/master/TrOCR/Fine_tune_TrOCR_on_IAM_Handwriting_Database_using_native_PyTorch.ipynb\" target=\"_parent\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\"/></a>"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "XZTfJ2fy7Bxu"
      },
      "source": [
        "## Fine-tune TrOCR on the IAM Handwriting Database\n",
        "\n",
        "In this notebook, we are going to fine-tune a pre-trained TrOCR model on the [IAM Handwriting Database](https://fki.tic.heia-fr.ch/databases/iam-handwriting-database), a collection of annotated images of handwritten text.\n",
        "\n",
        "We will do this using the new `VisionEncoderDecoderModel` class, which can be used to combine any image Transformer encoder (such as ViT, BEiT) with any text Transformer as decoder (such as BERT, RoBERTa, GPT-2). TrOCR is an instance of this, as it has an encoder-decoder architecture, with the weights of the encoder initialized from a pre-trained BEiT, and the weights of the decoder initialized from a pre-trained RoBERTa. The weights of the cross-attention layer were randomly initialized, before the authors pre-trained the model further on millions of (partially synthetic) annotated images of handwritten text. \n",
        "\n",
        "This figure gives a good overview of the model (from the original paper):\n",
        "\n",
        "![Schermafbeelding 2021-10-26 om 16.09.25.png]()\n",
        "\n",
        "* TrOCR paper: https://arxiv.org/abs/2109.10282\n",
        "* TrOCR documentation: https://huggingface.co/transformers/master/model_doc/trocr.html\n",
        "\n",
        "\n",
        "Note that Patrick also wrote a very good [blog post](https://huggingface.co/blog/warm-starting-encoder-decoder) on warm-starting encoder-decoder models (which is what the TrOCR authors did). This blog post was very helpful for me to create this notebook. \n",
        "\n",
        "We will fine-tune the model using native PyTorch.\n",
        "\n",
        "\n",
        "\n",
        "## Set-up environment\n",
        "\n",
        "First, let's install the required libraries:\n",
        "* Transformers (for the TrOCR model)\n",
        "* Datasets & Jiwer (for the evaluation metric)\n",
        "\n",
        "We will not be using HuggingFace Datasets in this notebook for data preprocessing, we will just create a good old basic PyTorch Dataset."
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "pkSzlRJq68tH"
      },
      "source": [
        "!pip install -q transformers"
      ],
      "execution_count": 1,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "a8eZ6PWTHriw"
      },
      "source": [
        "!pip install -q datasets jiwer"
      ],
      "execution_count": 2,
      "outputs": []
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "lsTaPrDR7My2"
      },
      "source": [
        "## Prepare data\n",
        "\n",
        "We first download the data. Here, I'm just using the IAM test set, as this was released by the TrOCR authors in the unilm repository. It can be downloaded from [this page](https://github.com/microsoft/unilm/tree/master/trocr). \n",
        "\n",
        "Let's make a [regular PyTorch dataset](https://pytorch.org/tutorials/beginner/basics/data_tutorial.html). We first create a Pandas dataframe with 2 columns. Each row consists of the file name of an image, and the corresponding text."
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 204
        },
        "id": "KkHqJw-W9Abl",
        "outputId": "bb86ef54-2407-49f8-8859-106a9d733046"
      },
      "source": [
        "import pandas as pd\n",
        "\n",
        "df = pd.read_fwf('/content/drive/MyDrive/TrOCR/Tutorial notebooks/IAM/gt_test.txt', header=None)\n",
        "df.rename(columns={0: \"file_name\", 1: \"text\"}, inplace=True)\n",
        "del df[2]\n",
        "# some file names end with jp instead of jpg, let's fix this\n",
        "df['file_name'] = df['file_name'].apply(lambda x: x + 'g' if x.endswith('jp') else x)\n",
        "df.head()"
      ],
      "execution_count": 3,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/html": [
              "<div>\n",
              "<style scoped>\n",
              "    .dataframe tbody tr th:only-of-type {\n",
              "        vertical-align: middle;\n",
              "    }\n",
              "\n",
              "    .dataframe tbody tr th {\n",
              "        vertical-align: top;\n",
              "    }\n",
              "\n",
              "    .dataframe thead th {\n",
              "        text-align: right;\n",
              "    }\n",
              "</style>\n",
              "<table border=\"1\" class=\"dataframe\">\n",
              "  <thead>\n",
              "    <tr style=\"text-align: right;\">\n",
              "      <th></th>\n",
              "      <th>file_name</th>\n",
              "      <th>text</th>\n",
              "    </tr>\n",
              "  </thead>\n",
              "  <tbody>\n",
              "    <tr>\n",
              "      <th>0</th>\n",
              "      <td>c04-110-00.jpg</td>\n",
              "      <td>Become a success with a disc and hey presto ! ...</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>1</th>\n",
              "      <td>c04-110-01.jpg</td>\n",
              "      <td>assuredness \" Bella Bella Marie \" ( Parlophone...</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>2</th>\n",
              "      <td>c04-110-02.jpg</td>\n",
              "      <td>I don't think he will storm the charts with th...</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>3</th>\n",
              "      <td>c04-110-03.jpg</td>\n",
              "      <td>CHRIS CHARLES , 39 , who lives in Stockton-on-...</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>4</th>\n",
              "      <td>c04-116-00.jpg</td>\n",
              "      <td>He is also a director of a couple of garages ....</td>\n",
              "    </tr>\n",
              "  </tbody>\n",
              "</table>\n",
              "</div>"
            ],
            "text/plain": [
              "        file_name                                               text\n",
              "0  c04-110-00.jpg  Become a success with a disc and hey presto ! ...\n",
              "1  c04-110-01.jpg  assuredness \" Bella Bella Marie \" ( Parlophone...\n",
              "2  c04-110-02.jpg  I don't think he will storm the charts with th...\n",
              "3  c04-110-03.jpg  CHRIS CHARLES , 39 , who lives in Stockton-on-...\n",
              "4  c04-116-00.jpg  He is also a director of a couple of garages ...."
            ]
          },
          "metadata": {},
          "execution_count": 3
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "qJlVYVal9Ojy"
      },
      "source": [
        "We split up the data into training + testing, using sklearn's `train_test_split` function."
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "6qLVT1TPN8Nt"
      },
      "source": [
        "from sklearn.model_selection import train_test_split\n",
        "\n",
        "train_df, test_df = train_test_split(df, test_size=0.2)\n",
        "# we reset the indices to start from zero\n",
        "train_df.reset_index(drop=True, inplace=True)\n",
        "test_df.reset_index(drop=True, inplace=True)"
      ],
      "execution_count": 4,
      "outputs": []
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "fwlEBh6B9RTE"
      },
      "source": [
        "Each element of the dataset should return 2 things:\n",
        "* `pixel_values`, which serve as input to the model.\n",
        "* `labels`, which are the `input_ids` of the corresponding text in the image.\n",
        "\n",
        "We use `TrOCRProcessor` to prepare the data for the model. `TrOCRProcessor` is actually just a wrapper around a `ViTFeatureExtractor` (which can be used to resize + normalize images) and a `RobertaTokenizer` (which can be used to encode and decode text into/from `input_ids`). "
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "qO5Q8WYp7DLx"
      },
      "source": [
        "import torch\n",
        "from torch.utils.data import Dataset\n",
        "from PIL import Image\n",
        "\n",
        "class IAMDataset(Dataset):\n",
        "    def __init__(self, root_dir, df, processor, max_target_length=128):\n",
        "        self.root_dir = root_dir\n",
        "        self.df = df\n",
        "        self.processor = processor\n",
        "        self.max_target_length = max_target_length\n",
        "\n",
        "    def __len__(self):\n",
        "        return len(self.df)\n",
        "\n",
        "    def __getitem__(self, idx):\n",
        "        # get file name + text \n",
        "        file_name = self.df['file_name'][idx]\n",
        "        text = self.df['text'][idx]\n",
        "        # prepare image (i.e. resize + normalize)\n",
        "        image = Image.open(self.root_dir + file_name).convert(\"RGB\")\n",
        "        pixel_values = self.processor(image, return_tensors=\"pt\").pixel_values\n",
        "        # add labels (input_ids) by encoding the text\n",
        "        labels = self.processor.tokenizer(text, \n",
        "                                          padding=\"max_length\", \n",
        "                                          max_length=self.max_target_length).input_ids\n",
        "        # important: make sure that PAD tokens are ignored by the loss function\n",
        "        labels = [label if label != self.processor.tokenizer.pad_token_id else -100 for label in labels]\n",
        "\n",
        "        encoding = {\"pixel_values\": pixel_values.squeeze(), \"labels\": torch.tensor(labels)}\n",
        "        return encoding"
      ],
      "execution_count": 5,
      "outputs": []
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "yzL7C60c-v-B"
      },
      "source": [
        "Let's initialize the training and evaluation datasets:"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "KIa78c2W8uT9"
      },
      "source": [
        "from transformers import TrOCRProcessor\n",
        "\n",
        "processor = TrOCRProcessor.from_pretrained(\"microsoft/trocr-base-handwritten\")\n",
        "train_dataset = IAMDataset(root_dir='/content/drive/MyDrive/TrOCR/Tutorial notebooks/IAM/image/',\n",
        "                           df=train_df,\n",
        "                           processor=processor)\n",
        "eval_dataset = IAMDataset(root_dir='/content/drive/MyDrive/TrOCR/Tutorial notebooks/IAM/image/',\n",
        "                           df=test_df,\n",
        "                           processor=processor)"
      ],
      "execution_count": 6,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "PiwZLbMeLCfo",
        "outputId": "033d6406-68a5-4e98-8d4b-5504bcc7d88b"
      },
      "source": [
        "print(\"Number of training examples:\", len(train_dataset))\n",
        "print(\"Number of validation examples:\", len(eval_dataset))"
      ],
      "execution_count": 7,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Number of training examples: 2332\n",
            "Number of validation examples: 583\n"
          ]
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "7p8JfQrx-6EM"
      },
      "source": [
        "Let's verify an example from the training dataset:"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "rwBNrfD78RA7",
        "outputId": "a11d4087-6b82-4389-eb4c-f7bf1862b117"
      },
      "source": [
        "encoding = train_dataset[0]\n",
        "for k,v in encoding.items():\n",
        "  print(k, v.shape)"
      ],
      "execution_count": 8,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "pixel_values torch.Size([3, 384, 384])\n",
            "labels torch.Size([128])\n"
          ]
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "lN-3pf6T_uRe"
      },
      "source": [
        "We can also check the original image and decode the labels:"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 89
        },
        "id": "QzgOFgD4_7Kw",
        "outputId": "a52bcf03-2c78-4332-bdb6-033299b386ca"
      },
      "source": [
        "image = Image.open(train_dataset.root_dir + train_df['file_name'][0]).convert(\"RGB\")\n",
        "image"
      ],
      "execution_count": 9,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "image/png": "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\n",
            "text/plain": [
              "<PIL.Image.Image image mode=RGB size=1815x128 at 0x7F6357D56690>"
            ]
          },
          "metadata": {},
          "execution_count": 9
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "vMtfkDia-8tQ",
        "outputId": "f4035a12-75f8-4d79-f4c6-593179393e45"
      },
      "source": [
        "labels = encoding['labels']\n",
        "labels[labels == -100] = processor.tokenizer.pad_token_id\n",
        "label_str = processor.decode(labels, skip_special_tokens=True)\n",
        "print(label_str)"
      ],
      "execution_count": 10,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "which had grown up during the Moon's\n"
          ]
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "OEX6mHrn8zz4"
      },
      "source": [
        "Let's create corresponding dataloaders:"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "8zXpxhJx81Ru"
      },
      "source": [
        "from torch.utils.data import DataLoader\n",
        "\n",
        "train_dataloader = DataLoader(train_dataset, batch_size=4, shuffle=True)\n",
        "eval_dataloader = DataLoader(eval_dataset, batch_size=4)"
      ],
      "execution_count": 11,
      "outputs": []
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "XxU7TfoYBvg0"
      },
      "source": [
        "## Train a model\n",
        "\n",
        "Here, we initialize the TrOCR model from its pretrained weights. Note that the weights of the language modeling head are already initialized from pre-training, as the model was already trained to generate text during its pre-training stage. Refer to the paper for details."
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "bRhvTRrGBIfy",
        "outputId": "6314dcd2-4240-4d5b-ec18-3ef2b1e78cc7"
      },
      "source": [
        "from transformers import VisionEncoderDecoderModel\n",
        "import torch\n",
        "\n",
        "device = torch.device(\"cuda\" if torch.cuda.is_available() else \"cpu\")\n",
        "\n",
        "model = VisionEncoderDecoderModel.from_pretrained(\"microsoft/trocr-base-stage1\")\n",
        "model.to(device)"
      ],
      "execution_count": 12,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stderr",
          "text": [
            "Some weights of VisionEncoderDecoderModel were not initialized from the model checkpoint at microsoft/trocr-base-stage1 and are newly initialized: ['encoder.pooler.dense.weight', 'encoder.pooler.dense.bias']\n",
            "You should probably TRAIN this model on a down-stream task to be able to use it for predictions and inference.\n"
          ]
        },
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "VisionEncoderDecoderModel(\n",
              "  (encoder): ViTModel(\n",
              "    (embeddings): ViTEmbeddings(\n",
              "      (patch_embeddings): PatchEmbeddings(\n",
              "        (projection): Conv2d(3, 768, kernel_size=(16, 16), stride=(16, 16))\n",
              "      )\n",
              "      (dropout): Dropout(p=0.0, inplace=False)\n",
              "    )\n",
              "    (encoder): ViTEncoder(\n",
              "      (layer): ModuleList(\n",
              "        (0): ViTLayer(\n",
              "          (attention): ViTAttention(\n",
              "            (attention): ViTSelfAttention(\n",
              "              (query): Linear(in_features=768, out_features=768, bias=False)\n",
              "              (key): Linear(in_features=768, out_features=768, bias=False)\n",
              "              (value): Linear(in_features=768, out_features=768, bias=False)\n",
              "              (dropout): Dropout(p=0.0, inplace=False)\n",
              "            )\n",
              "            (output): ViTSelfOutput(\n",
              "              (dense): Linear(in_features=768, out_features=768, bias=True)\n",
              "              (dropout): Dropout(p=0.0, inplace=False)\n",
              "            )\n",
              "          )\n",
              "          (intermediate): ViTIntermediate(\n",
              "            (dense): Linear(in_features=768, out_features=3072, bias=True)\n",
              "          )\n",
              "          (output): ViTOutput(\n",
              "            (dense): Linear(in_features=3072, out_features=768, bias=True)\n",
              "            (dropout): Dropout(p=0.0, inplace=False)\n",
              "          )\n",
              "          (layernorm_before): LayerNorm((768,), eps=1e-12, elementwise_affine=True)\n",
              "          (layernorm_after): LayerNorm((768,), eps=1e-12, elementwise_affine=True)\n",
              "        )\n",
              "        (1): ViTLayer(\n",
              "          (attention): ViTAttention(\n",
              "            (attention): ViTSelfAttention(\n",
              "              (query): Linear(in_features=768, out_features=768, bias=False)\n",
              "              (key): Linear(in_features=768, out_features=768, bias=False)\n",
              "              (value): Linear(in_features=768, out_features=768, bias=False)\n",
              "              (dropout): Dropout(p=0.0, inplace=False)\n",
              "            )\n",
              "            (output): ViTSelfOutput(\n",
              "              (dense): Linear(in_features=768, out_features=768, bias=True)\n",
              "              (dropout): Dropout(p=0.0, inplace=False)\n",
              "            )\n",
              "          )\n",
              "          (intermediate): ViTIntermediate(\n",
              "            (dense): Linear(in_features=768, out_features=3072, bias=True)\n",
              "          )\n",
              "          (output): ViTOutput(\n",
              "            (dense): Linear(in_features=3072, out_features=768, bias=True)\n",
              "            (dropout): Dropout(p=0.0, inplace=False)\n",
              "          )\n",
              "          (layernorm_before): LayerNorm((768,), eps=1e-12, elementwise_affine=True)\n",
              "          (layernorm_after): LayerNorm((768,), eps=1e-12, elementwise_affine=True)\n",
              "        )\n",
              "        (2): ViTLayer(\n",
              "          (attention): ViTAttention(\n",
              "            (attention): ViTSelfAttention(\n",
              "              (query): Linear(in_features=768, out_features=768, bias=False)\n",
              "              (key): Linear(in_features=768, out_features=768, bias=False)\n",
              "              (value): Linear(in_features=768, out_features=768, bias=False)\n",
              "              (dropout): Dropout(p=0.0, inplace=False)\n",
              "            )\n",
              "            (output): ViTSelfOutput(\n",
              "              (dense): Linear(in_features=768, out_features=768, bias=True)\n",
              "              (dropout): Dropout(p=0.0, inplace=False)\n",
              "            )\n",
              "          )\n",
              "          (intermediate): ViTIntermediate(\n",
              "            (dense): Linear(in_features=768, out_features=3072, bias=True)\n",
              "          )\n",
              "          (output): ViTOutput(\n",
              "            (dense): Linear(in_features=3072, out_features=768, bias=True)\n",
              "            (dropout): Dropout(p=0.0, inplace=False)\n",
              "          )\n",
              "          (layernorm_before): LayerNorm((768,), eps=1e-12, elementwise_affine=True)\n",
              "          (layernorm_after): LayerNorm((768,), eps=1e-12, elementwise_affine=True)\n",
              "        )\n",
              "        (3): ViTLayer(\n",
              "          (attention): ViTAttention(\n",
              "            (attention): ViTSelfAttention(\n",
              "              (query): Linear(in_features=768, out_features=768, bias=False)\n",
              "              (key): Linear(in_features=768, out_features=768, bias=False)\n",
              "              (value): Linear(in_features=768, out_features=768, bias=False)\n",
              "              (dropout): Dropout(p=0.0, inplace=False)\n",
              "            )\n",
              "            (output): ViTSelfOutput(\n",
              "              (dense): Linear(in_features=768, out_features=768, bias=True)\n",
              "              (dropout): Dropout(p=0.0, inplace=False)\n",
              "            )\n",
              "          )\n",
              "          (intermediate): ViTIntermediate(\n",
              "            (dense): Linear(in_features=768, out_features=3072, bias=True)\n",
              "          )\n",
              "          (output): ViTOutput(\n",
              "            (dense): Linear(in_features=3072, out_features=768, bias=True)\n",
              "            (dropout): Dropout(p=0.0, inplace=False)\n",
              "          )\n",
              "          (layernorm_before): LayerNorm((768,), eps=1e-12, elementwise_affine=True)\n",
              "          (layernorm_after): LayerNorm((768,), eps=1e-12, elementwise_affine=True)\n",
              "        )\n",
              "        (4): ViTLayer(\n",
              "          (attention): ViTAttention(\n",
              "            (attention): ViTSelfAttention(\n",
              "              (query): Linear(in_features=768, out_features=768, bias=False)\n",
              "              (key): Linear(in_features=768, out_features=768, bias=False)\n",
              "              (value): Linear(in_features=768, out_features=768, bias=False)\n",
              "              (dropout): Dropout(p=0.0, inplace=False)\n",
              "            )\n",
              "            (output): ViTSelfOutput(\n",
              "              (dense): Linear(in_features=768, out_features=768, bias=True)\n",
              "              (dropout): Dropout(p=0.0, inplace=False)\n",
              "            )\n",
              "          )\n",
              "          (intermediate): ViTIntermediate(\n",
              "            (dense): Linear(in_features=768, out_features=3072, bias=True)\n",
              "          )\n",
              "          (output): ViTOutput(\n",
              "            (dense): Linear(in_features=3072, out_features=768, bias=True)\n",
              "            (dropout): Dropout(p=0.0, inplace=False)\n",
              "          )\n",
              "          (layernorm_before): LayerNorm((768,), eps=1e-12, elementwise_affine=True)\n",
              "          (layernorm_after): LayerNorm((768,), eps=1e-12, elementwise_affine=True)\n",
              "        )\n",
              "        (5): ViTLayer(\n",
              "          (attention): ViTAttention(\n",
              "            (attention): ViTSelfAttention(\n",
              "              (query): Linear(in_features=768, out_features=768, bias=False)\n",
              "              (key): Linear(in_features=768, out_features=768, bias=False)\n",
              "              (value): Linear(in_features=768, out_features=768, bias=False)\n",
              "              (dropout): Dropout(p=0.0, inplace=False)\n",
              "            )\n",
              "            (output): ViTSelfOutput(\n",
              "              (dense): Linear(in_features=768, out_features=768, bias=True)\n",
              "              (dropout): Dropout(p=0.0, inplace=False)\n",
              "            )\n",
              "          )\n",
              "          (intermediate): ViTIntermediate(\n",
              "            (dense): Linear(in_features=768, out_features=3072, bias=True)\n",
              "          )\n",
              "          (output): ViTOutput(\n",
              "            (dense): Linear(in_features=3072, out_features=768, bias=True)\n",
              "            (dropout): Dropout(p=0.0, inplace=False)\n",
              "          )\n",
              "          (layernorm_before): LayerNorm((768,), eps=1e-12, elementwise_affine=True)\n",
              "          (layernorm_after): LayerNorm((768,), eps=1e-12, elementwise_affine=True)\n",
              "        )\n",
              "        (6): ViTLayer(\n",
              "          (attention): ViTAttention(\n",
              "            (attention): ViTSelfAttention(\n",
              "              (query): Linear(in_features=768, out_features=768, bias=False)\n",
              "              (key): Linear(in_features=768, out_features=768, bias=False)\n",
              "              (value): Linear(in_features=768, out_features=768, bias=False)\n",
              "              (dropout): Dropout(p=0.0, inplace=False)\n",
              "            )\n",
              "            (output): ViTSelfOutput(\n",
              "              (dense): Linear(in_features=768, out_features=768, bias=True)\n",
              "              (dropout): Dropout(p=0.0, inplace=False)\n",
              "            )\n",
              "          )\n",
              "          (intermediate): ViTIntermediate(\n",
              "            (dense): Linear(in_features=768, out_features=3072, bias=True)\n",
              "          )\n",
              "          (output): ViTOutput(\n",
              "            (dense): Linear(in_features=3072, out_features=768, bias=True)\n",
              "            (dropout): Dropout(p=0.0, inplace=False)\n",
              "          )\n",
              "          (layernorm_before): LayerNorm((768,), eps=1e-12, elementwise_affine=True)\n",
              "          (layernorm_after): LayerNorm((768,), eps=1e-12, elementwise_affine=True)\n",
              "        )\n",
              "        (7): ViTLayer(\n",
              "          (attention): ViTAttention(\n",
              "            (attention): ViTSelfAttention(\n",
              "              (query): Linear(in_features=768, out_features=768, bias=False)\n",
              "              (key): Linear(in_features=768, out_features=768, bias=False)\n",
              "              (value): Linear(in_features=768, out_features=768, bias=False)\n",
              "              (dropout): Dropout(p=0.0, inplace=False)\n",
              "            )\n",
              "            (output): ViTSelfOutput(\n",
              "              (dense): Linear(in_features=768, out_features=768, bias=True)\n",
              "              (dropout): Dropout(p=0.0, inplace=False)\n",
              "            )\n",
              "          )\n",
              "          (intermediate): ViTIntermediate(\n",
              "            (dense): Linear(in_features=768, out_features=3072, bias=True)\n",
              "          )\n",
              "          (output): ViTOutput(\n",
              "            (dense): Linear(in_features=3072, out_features=768, bias=True)\n",
              "            (dropout): Dropout(p=0.0, inplace=False)\n",
              "          )\n",
              "          (layernorm_before): LayerNorm((768,), eps=1e-12, elementwise_affine=True)\n",
              "          (layernorm_after): LayerNorm((768,), eps=1e-12, elementwise_affine=True)\n",
              "        )\n",
              "        (8): ViTLayer(\n",
              "          (attention): ViTAttention(\n",
              "            (attention): ViTSelfAttention(\n",
              "              (query): Linear(in_features=768, out_features=768, bias=False)\n",
              "              (key): Linear(in_features=768, out_features=768, bias=False)\n",
              "              (value): Linear(in_features=768, out_features=768, bias=False)\n",
              "              (dropout): Dropout(p=0.0, inplace=False)\n",
              "            )\n",
              "            (output): ViTSelfOutput(\n",
              "              (dense): Linear(in_features=768, out_features=768, bias=True)\n",
              "              (dropout): Dropout(p=0.0, inplace=False)\n",
              "            )\n",
              "          )\n",
              "          (intermediate): ViTIntermediate(\n",
              "            (dense): Linear(in_features=768, out_features=3072, bias=True)\n",
              "          )\n",
              "          (output): ViTOutput(\n",
              "            (dense): Linear(in_features=3072, out_features=768, bias=True)\n",
              "            (dropout): Dropout(p=0.0, inplace=False)\n",
              "          )\n",
              "          (layernorm_before): LayerNorm((768,), eps=1e-12, elementwise_affine=True)\n",
              "          (layernorm_after): LayerNorm((768,), eps=1e-12, elementwise_affine=True)\n",
              "        )\n",
              "        (9): ViTLayer(\n",
              "          (attention): ViTAttention(\n",
              "            (attention): ViTSelfAttention(\n",
              "              (query): Linear(in_features=768, out_features=768, bias=False)\n",
              "              (key): Linear(in_features=768, out_features=768, bias=False)\n",
              "              (value): Linear(in_features=768, out_features=768, bias=False)\n",
              "              (dropout): Dropout(p=0.0, inplace=False)\n",
              "            )\n",
              "            (output): ViTSelfOutput(\n",
              "              (dense): Linear(in_features=768, out_features=768, bias=True)\n",
              "              (dropout): Dropout(p=0.0, inplace=False)\n",
              "            )\n",
              "          )\n",
              "          (intermediate): ViTIntermediate(\n",
              "            (dense): Linear(in_features=768, out_features=3072, bias=True)\n",
              "          )\n",
              "          (output): ViTOutput(\n",
              "            (dense): Linear(in_features=3072, out_features=768, bias=True)\n",
              "            (dropout): Dropout(p=0.0, inplace=False)\n",
              "          )\n",
              "          (layernorm_before): LayerNorm((768,), eps=1e-12, elementwise_affine=True)\n",
              "          (layernorm_after): LayerNorm((768,), eps=1e-12, elementwise_affine=True)\n",
              "        )\n",
              "        (10): ViTLayer(\n",
              "          (attention): ViTAttention(\n",
              "            (attention): ViTSelfAttention(\n",
              "              (query): Linear(in_features=768, out_features=768, bias=False)\n",
              "              (key): Linear(in_features=768, out_features=768, bias=False)\n",
              "              (value): Linear(in_features=768, out_features=768, bias=False)\n",
              "              (dropout): Dropout(p=0.0, inplace=False)\n",
              "            )\n",
              "            (output): ViTSelfOutput(\n",
              "              (dense): Linear(in_features=768, out_features=768, bias=True)\n",
              "              (dropout): Dropout(p=0.0, inplace=False)\n",
              "            )\n",
              "          )\n",
              "          (intermediate): ViTIntermediate(\n",
              "            (dense): Linear(in_features=768, out_features=3072, bias=True)\n",
              "          )\n",
              "          (output): ViTOutput(\n",
              "            (dense): Linear(in_features=3072, out_features=768, bias=True)\n",
              "            (dropout): Dropout(p=0.0, inplace=False)\n",
              "          )\n",
              "          (layernorm_before): LayerNorm((768,), eps=1e-12, elementwise_affine=True)\n",
              "          (layernorm_after): LayerNorm((768,), eps=1e-12, elementwise_affine=True)\n",
              "        )\n",
              "        (11): ViTLayer(\n",
              "          (attention): ViTAttention(\n",
              "            (attention): ViTSelfAttention(\n",
              "              (query): Linear(in_features=768, out_features=768, bias=False)\n",
              "              (key): Linear(in_features=768, out_features=768, bias=False)\n",
              "              (value): Linear(in_features=768, out_features=768, bias=False)\n",
              "              (dropout): Dropout(p=0.0, inplace=False)\n",
              "            )\n",
              "            (output): ViTSelfOutput(\n",
              "              (dense): Linear(in_features=768, out_features=768, bias=True)\n",
              "              (dropout): Dropout(p=0.0, inplace=False)\n",
              "            )\n",
              "          )\n",
              "          (intermediate): ViTIntermediate(\n",
              "            (dense): Linear(in_features=768, out_features=3072, bias=True)\n",
              "          )\n",
              "          (output): ViTOutput(\n",
              "            (dense): Linear(in_features=3072, out_features=768, bias=True)\n",
              "            (dropout): Dropout(p=0.0, inplace=False)\n",
              "          )\n",
              "          (layernorm_before): LayerNorm((768,), eps=1e-12, elementwise_affine=True)\n",
              "          (layernorm_after): LayerNorm((768,), eps=1e-12, elementwise_affine=True)\n",
              "        )\n",
              "      )\n",
              "    )\n",
              "    (layernorm): LayerNorm((768,), eps=1e-12, elementwise_affine=True)\n",
              "    (pooler): ViTPooler(\n",
              "      (dense): Linear(in_features=768, out_features=768, bias=True)\n",
              "      (activation): Tanh()\n",
              "    )\n",
              "  )\n",
              "  (decoder): TrOCRForCausalLM(\n",
              "    (model): TrOCRDecoderWrapper(\n",
              "      (decoder): TrOCRDecoder(\n",
              "        (embed_tokens): Embedding(50265, 1024, padding_idx=1)\n",
              "        (embed_positions): TrOCRSinusoidalPositionalEmbedding()\n",
              "        (layers): ModuleList(\n",
              "          (0): TrOCRDecoderLayer(\n",
              "            (self_attn): TrOCRAttention(\n",
              "              (k_proj): Linear(in_features=1024, out_features=1024, bias=True)\n",
              "              (v_proj): Linear(in_features=1024, out_features=1024, bias=True)\n",
              "              (q_proj): Linear(in_features=1024, out_features=1024, bias=True)\n",
              "              (out_proj): Linear(in_features=1024, out_features=1024, bias=True)\n",
              "            )\n",
              "            (self_attn_layer_norm): LayerNorm((1024,), eps=1e-05, elementwise_affine=True)\n",
              "            (encoder_attn): TrOCRAttention(\n",
              "              (k_proj): Linear(in_features=768, out_features=1024, bias=True)\n",
              "              (v_proj): Linear(in_features=768, out_features=1024, bias=True)\n",
              "              (q_proj): Linear(in_features=1024, out_features=1024, bias=True)\n",
              "              (out_proj): Linear(in_features=1024, out_features=1024, bias=True)\n",
              "            )\n",
              "            (encoder_attn_layer_norm): LayerNorm((1024,), eps=1e-05, elementwise_affine=True)\n",
              "            (fc1): Linear(in_features=1024, out_features=4096, bias=True)\n",
              "            (fc2): Linear(in_features=4096, out_features=1024, bias=True)\n",
              "            (final_layer_norm): LayerNorm((1024,), eps=1e-05, elementwise_affine=True)\n",
              "          )\n",
              "          (1): TrOCRDecoderLayer(\n",
              "            (self_attn): TrOCRAttention(\n",
              "              (k_proj): Linear(in_features=1024, out_features=1024, bias=True)\n",
              "              (v_proj): Linear(in_features=1024, out_features=1024, bias=True)\n",
              "              (q_proj): Linear(in_features=1024, out_features=1024, bias=True)\n",
              "              (out_proj): Linear(in_features=1024, out_features=1024, bias=True)\n",
              "            )\n",
              "            (self_attn_layer_norm): LayerNorm((1024,), eps=1e-05, elementwise_affine=True)\n",
              "            (encoder_attn): TrOCRAttention(\n",
              "              (k_proj): Linear(in_features=768, out_features=1024, bias=True)\n",
              "              (v_proj): Linear(in_features=768, out_features=1024, bias=True)\n",
              "              (q_proj): Linear(in_features=1024, out_features=1024, bias=True)\n",
              "              (out_proj): Linear(in_features=1024, out_features=1024, bias=True)\n",
              "            )\n",
              "            (encoder_attn_layer_norm): LayerNorm((1024,), eps=1e-05, elementwise_affine=True)\n",
              "            (fc1): Linear(in_features=1024, out_features=4096, bias=True)\n",
              "            (fc2): Linear(in_features=4096, out_features=1024, bias=True)\n",
              "            (final_layer_norm): LayerNorm((1024,), eps=1e-05, elementwise_affine=True)\n",
              "          )\n",
              "          (2): TrOCRDecoderLayer(\n",
              "            (self_attn): TrOCRAttention(\n",
              "              (k_proj): Linear(in_features=1024, out_features=1024, bias=True)\n",
              "              (v_proj): Linear(in_features=1024, out_features=1024, bias=True)\n",
              "              (q_proj): Linear(in_features=1024, out_features=1024, bias=True)\n",
              "              (out_proj): Linear(in_features=1024, out_features=1024, bias=True)\n",
              "            )\n",
              "            (self_attn_layer_norm): LayerNorm((1024,), eps=1e-05, elementwise_affine=True)\n",
              "            (encoder_attn): TrOCRAttention(\n",
              "              (k_proj): Linear(in_features=768, out_features=1024, bias=True)\n",
              "              (v_proj): Linear(in_features=768, out_features=1024, bias=True)\n",
              "              (q_proj): Linear(in_features=1024, out_features=1024, bias=True)\n",
              "              (out_proj): Linear(in_features=1024, out_features=1024, bias=True)\n",
              "            )\n",
              "            (encoder_attn_layer_norm): LayerNorm((1024,), eps=1e-05, elementwise_affine=True)\n",
              "            (fc1): Linear(in_features=1024, out_features=4096, bias=True)\n",
              "            (fc2): Linear(in_features=4096, out_features=1024, bias=True)\n",
              "            (final_layer_norm): LayerNorm((1024,), eps=1e-05, elementwise_affine=True)\n",
              "          )\n",
              "          (3): TrOCRDecoderLayer(\n",
              "            (self_attn): TrOCRAttention(\n",
              "              (k_proj): Linear(in_features=1024, out_features=1024, bias=True)\n",
              "              (v_proj): Linear(in_features=1024, out_features=1024, bias=True)\n",
              "              (q_proj): Linear(in_features=1024, out_features=1024, bias=True)\n",
              "              (out_proj): Linear(in_features=1024, out_features=1024, bias=True)\n",
              "            )\n",
              "            (self_attn_layer_norm): LayerNorm((1024,), eps=1e-05, elementwise_affine=True)\n",
              "            (encoder_attn): TrOCRAttention(\n",
              "              (k_proj): Linear(in_features=768, out_features=1024, bias=True)\n",
              "              (v_proj): Linear(in_features=768, out_features=1024, bias=True)\n",
              "              (q_proj): Linear(in_features=1024, out_features=1024, bias=True)\n",
              "              (out_proj): Linear(in_features=1024, out_features=1024, bias=True)\n",
              "            )\n",
              "            (encoder_attn_layer_norm): LayerNorm((1024,), eps=1e-05, elementwise_affine=True)\n",
              "            (fc1): Linear(in_features=1024, out_features=4096, bias=True)\n",
              "            (fc2): Linear(in_features=4096, out_features=1024, bias=True)\n",
              "            (final_layer_norm): LayerNorm((1024,), eps=1e-05, elementwise_affine=True)\n",
              "          )\n",
              "          (4): TrOCRDecoderLayer(\n",
              "            (self_attn): TrOCRAttention(\n",
              "              (k_proj): Linear(in_features=1024, out_features=1024, bias=True)\n",
              "              (v_proj): Linear(in_features=1024, out_features=1024, bias=True)\n",
              "              (q_proj): Linear(in_features=1024, out_features=1024, bias=True)\n",
              "              (out_proj): Linear(in_features=1024, out_features=1024, bias=True)\n",
              "            )\n",
              "            (self_attn_layer_norm): LayerNorm((1024,), eps=1e-05, elementwise_affine=True)\n",
              "            (encoder_attn): TrOCRAttention(\n",
              "              (k_proj): Linear(in_features=768, out_features=1024, bias=True)\n",
              "              (v_proj): Linear(in_features=768, out_features=1024, bias=True)\n",
              "              (q_proj): Linear(in_features=1024, out_features=1024, bias=True)\n",
              "              (out_proj): Linear(in_features=1024, out_features=1024, bias=True)\n",
              "            )\n",
              "            (encoder_attn_layer_norm): LayerNorm((1024,), eps=1e-05, elementwise_affine=True)\n",
              "            (fc1): Linear(in_features=1024, out_features=4096, bias=True)\n",
              "            (fc2): Linear(in_features=4096, out_features=1024, bias=True)\n",
              "            (final_layer_norm): LayerNorm((1024,), eps=1e-05, elementwise_affine=True)\n",
              "          )\n",
              "          (5): TrOCRDecoderLayer(\n",
              "            (self_attn): TrOCRAttention(\n",
              "              (k_proj): Linear(in_features=1024, out_features=1024, bias=True)\n",
              "              (v_proj): Linear(in_features=1024, out_features=1024, bias=True)\n",
              "              (q_proj): Linear(in_features=1024, out_features=1024, bias=True)\n",
              "              (out_proj): Linear(in_features=1024, out_features=1024, bias=True)\n",
              "            )\n",
              "            (self_attn_layer_norm): LayerNorm((1024,), eps=1e-05, elementwise_affine=True)\n",
              "            (encoder_attn): TrOCRAttention(\n",
              "              (k_proj): Linear(in_features=768, out_features=1024, bias=True)\n",
              "              (v_proj): Linear(in_features=768, out_features=1024, bias=True)\n",
              "              (q_proj): Linear(in_features=1024, out_features=1024, bias=True)\n",
              "              (out_proj): Linear(in_features=1024, out_features=1024, bias=True)\n",
              "            )\n",
              "            (encoder_attn_layer_norm): LayerNorm((1024,), eps=1e-05, elementwise_affine=True)\n",
              "            (fc1): Linear(in_features=1024, out_features=4096, bias=True)\n",
              "            (fc2): Linear(in_features=4096, out_features=1024, bias=True)\n",
              "            (final_layer_norm): LayerNorm((1024,), eps=1e-05, elementwise_affine=True)\n",
              "          )\n",
              "          (6): TrOCRDecoderLayer(\n",
              "            (self_attn): TrOCRAttention(\n",
              "              (k_proj): Linear(in_features=1024, out_features=1024, bias=True)\n",
              "              (v_proj): Linear(in_features=1024, out_features=1024, bias=True)\n",
              "              (q_proj): Linear(in_features=1024, out_features=1024, bias=True)\n",
              "              (out_proj): Linear(in_features=1024, out_features=1024, bias=True)\n",
              "            )\n",
              "            (self_attn_layer_norm): LayerNorm((1024,), eps=1e-05, elementwise_affine=True)\n",
              "            (encoder_attn): TrOCRAttention(\n",
              "              (k_proj): Linear(in_features=768, out_features=1024, bias=True)\n",
              "              (v_proj): Linear(in_features=768, out_features=1024, bias=True)\n",
              "              (q_proj): Linear(in_features=1024, out_features=1024, bias=True)\n",
              "              (out_proj): Linear(in_features=1024, out_features=1024, bias=True)\n",
              "            )\n",
              "            (encoder_attn_layer_norm): LayerNorm((1024,), eps=1e-05, elementwise_affine=True)\n",
              "            (fc1): Linear(in_features=1024, out_features=4096, bias=True)\n",
              "            (fc2): Linear(in_features=4096, out_features=1024, bias=True)\n",
              "            (final_layer_norm): LayerNorm((1024,), eps=1e-05, elementwise_affine=True)\n",
              "          )\n",
              "          (7): TrOCRDecoderLayer(\n",
              "            (self_attn): TrOCRAttention(\n",
              "              (k_proj): Linear(in_features=1024, out_features=1024, bias=True)\n",
              "              (v_proj): Linear(in_features=1024, out_features=1024, bias=True)\n",
              "              (q_proj): Linear(in_features=1024, out_features=1024, bias=True)\n",
              "              (out_proj): Linear(in_features=1024, out_features=1024, bias=True)\n",
              "            )\n",
              "            (self_attn_layer_norm): LayerNorm((1024,), eps=1e-05, elementwise_affine=True)\n",
              "            (encoder_attn): TrOCRAttention(\n",
              "              (k_proj): Linear(in_features=768, out_features=1024, bias=True)\n",
              "              (v_proj): Linear(in_features=768, out_features=1024, bias=True)\n",
              "              (q_proj): Linear(in_features=1024, out_features=1024, bias=True)\n",
              "              (out_proj): Linear(in_features=1024, out_features=1024, bias=True)\n",
              "            )\n",
              "            (encoder_attn_layer_norm): LayerNorm((1024,), eps=1e-05, elementwise_affine=True)\n",
              "            (fc1): Linear(in_features=1024, out_features=4096, bias=True)\n",
              "            (fc2): Linear(in_features=4096, out_features=1024, bias=True)\n",
              "            (final_layer_norm): LayerNorm((1024,), eps=1e-05, elementwise_affine=True)\n",
              "          )\n",
              "          (8): TrOCRDecoderLayer(\n",
              "            (self_attn): TrOCRAttention(\n",
              "              (k_proj): Linear(in_features=1024, out_features=1024, bias=True)\n",
              "              (v_proj): Linear(in_features=1024, out_features=1024, bias=True)\n",
              "              (q_proj): Linear(in_features=1024, out_features=1024, bias=True)\n",
              "              (out_proj): Linear(in_features=1024, out_features=1024, bias=True)\n",
              "            )\n",
              "            (self_attn_layer_norm): LayerNorm((1024,), eps=1e-05, elementwise_affine=True)\n",
              "            (encoder_attn): TrOCRAttention(\n",
              "              (k_proj): Linear(in_features=768, out_features=1024, bias=True)\n",
              "              (v_proj): Linear(in_features=768, out_features=1024, bias=True)\n",
              "              (q_proj): Linear(in_features=1024, out_features=1024, bias=True)\n",
              "              (out_proj): Linear(in_features=1024, out_features=1024, bias=True)\n",
              "            )\n",
              "            (encoder_attn_layer_norm): LayerNorm((1024,), eps=1e-05, elementwise_affine=True)\n",
              "            (fc1): Linear(in_features=1024, out_features=4096, bias=True)\n",
              "            (fc2): Linear(in_features=4096, out_features=1024, bias=True)\n",
              "            (final_layer_norm): LayerNorm((1024,), eps=1e-05, elementwise_affine=True)\n",
              "          )\n",
              "          (9): TrOCRDecoderLayer(\n",
              "            (self_attn): TrOCRAttention(\n",
              "              (k_proj): Linear(in_features=1024, out_features=1024, bias=True)\n",
              "              (v_proj): Linear(in_features=1024, out_features=1024, bias=True)\n",
              "              (q_proj): Linear(in_features=1024, out_features=1024, bias=True)\n",
              "              (out_proj): Linear(in_features=1024, out_features=1024, bias=True)\n",
              "            )\n",
              "            (self_attn_layer_norm): LayerNorm((1024,), eps=1e-05, elementwise_affine=True)\n",
              "            (encoder_attn): TrOCRAttention(\n",
              "              (k_proj): Linear(in_features=768, out_features=1024, bias=True)\n",
              "              (v_proj): Linear(in_features=768, out_features=1024, bias=True)\n",
              "              (q_proj): Linear(in_features=1024, out_features=1024, bias=True)\n",
              "              (out_proj): Linear(in_features=1024, out_features=1024, bias=True)\n",
              "            )\n",
              "            (encoder_attn_layer_norm): LayerNorm((1024,), eps=1e-05, elementwise_affine=True)\n",
              "            (fc1): Linear(in_features=1024, out_features=4096, bias=True)\n",
              "            (fc2): Linear(in_features=4096, out_features=1024, bias=True)\n",
              "            (final_layer_norm): LayerNorm((1024,), eps=1e-05, elementwise_affine=True)\n",
              "          )\n",
              "          (10): TrOCRDecoderLayer(\n",
              "            (self_attn): TrOCRAttention(\n",
              "              (k_proj): Linear(in_features=1024, out_features=1024, bias=True)\n",
              "              (v_proj): Linear(in_features=1024, out_features=1024, bias=True)\n",
              "              (q_proj): Linear(in_features=1024, out_features=1024, bias=True)\n",
              "              (out_proj): Linear(in_features=1024, out_features=1024, bias=True)\n",
              "            )\n",
              "            (self_attn_layer_norm): LayerNorm((1024,), eps=1e-05, elementwise_affine=True)\n",
              "            (encoder_attn): TrOCRAttention(\n",
              "              (k_proj): Linear(in_features=768, out_features=1024, bias=True)\n",
              "              (v_proj): Linear(in_features=768, out_features=1024, bias=True)\n",
              "              (q_proj): Linear(in_features=1024, out_features=1024, bias=True)\n",
              "              (out_proj): Linear(in_features=1024, out_features=1024, bias=True)\n",
              "            )\n",
              "            (encoder_attn_layer_norm): LayerNorm((1024,), eps=1e-05, elementwise_affine=True)\n",
              "            (fc1): Linear(in_features=1024, out_features=4096, bias=True)\n",
              "            (fc2): Linear(in_features=4096, out_features=1024, bias=True)\n",
              "            (final_layer_norm): LayerNorm((1024,), eps=1e-05, elementwise_affine=True)\n",
              "          )\n",
              "          (11): TrOCRDecoderLayer(\n",
              "            (self_attn): TrOCRAttention(\n",
              "              (k_proj): Linear(in_features=1024, out_features=1024, bias=True)\n",
              "              (v_proj): Linear(in_features=1024, out_features=1024, bias=True)\n",
              "              (q_proj): Linear(in_features=1024, out_features=1024, bias=True)\n",
              "              (out_proj): Linear(in_features=1024, out_features=1024, bias=True)\n",
              "            )\n",
              "            (self_attn_layer_norm): LayerNorm((1024,), eps=1e-05, elementwise_affine=True)\n",
              "            (encoder_attn): TrOCRAttention(\n",
              "              (k_proj): Linear(in_features=768, out_features=1024, bias=True)\n",
              "              (v_proj): Linear(in_features=768, out_features=1024, bias=True)\n",
              "              (q_proj): Linear(in_features=1024, out_features=1024, bias=True)\n",
              "              (out_proj): Linear(in_features=1024, out_features=1024, bias=True)\n",
              "            )\n",
              "            (encoder_attn_layer_norm): LayerNorm((1024,), eps=1e-05, elementwise_affine=True)\n",
              "            (fc1): Linear(in_features=1024, out_features=4096, bias=True)\n",
              "            (fc2): Linear(in_features=4096, out_features=1024, bias=True)\n",
              "            (final_layer_norm): LayerNorm((1024,), eps=1e-05, elementwise_affine=True)\n",
              "          )\n",
              "        )\n",
              "      )\n",
              "    )\n",
              "    (output_projection): Linear(in_features=1024, out_features=50265, bias=False)\n",
              "  )\n",
              ")"
            ]
          },
          "metadata": {},
          "execution_count": 12
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "UqNELu3cQix5"
      },
      "source": [
        "Importantly, we need to set a couple of attributes, namely:\n",
        "* the attributes required for creating the `decoder_input_ids` from the `labels` (the model will automatically create the `decoder_input_ids` by shifting the `labels` one position to the right and prepending the `decoder_start_token_id`, as well as replacing ids which are -100 by the pad_token_id)\n",
        "* the vocabulary size of the model (for the language modeling head on top of the decoder)\n",
        "* beam-search related parameters which are used when generating text."
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "sNNT1XS_CMgl"
      },
      "source": [
        "# set special tokens used for creating the decoder_input_ids from the labels\n",
        "model.config.decoder_start_token_id = processor.tokenizer.cls_token_id\n",
        "model.config.pad_token_id = processor.tokenizer.pad_token_id\n",
        "# make sure vocab size is set correctly\n",
        "model.config.vocab_size = model.config.decoder.vocab_size\n",
        "\n",
        "# set beam search parameters\n",
        "model.config.eos_token_id = processor.tokenizer.sep_token_id\n",
        "model.config.max_length = 64\n",
        "model.config.early_stopping = True\n",
        "model.config.no_repeat_ngram_size = 3\n",
        "model.config.length_penalty = 2.0\n",
        "model.config.num_beams = 4"
      ],
      "execution_count": 13,
      "outputs": []
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "nV6KY53xvOgC"
      },
      "source": [
        "We will evaluate the model on the Character Error Rate (CER), which is available in HuggingFace Datasets (see [here](https://huggingface.co/metrics/cer))."
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "yoXD3_P10DD4"
      },
      "source": [
        "from datasets import load_metric\n",
        "\n",
        "cer_metric = load_metric(\"cer\")"
      ],
      "execution_count": 14,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "Y36AcnvP0OZw"
      },
      "source": [
        "def compute_cer(pred_ids, label_ids):\n",
        "    pred_str = processor.batch_decode(pred_ids, skip_special_tokens=True)\n",
        "    label_ids[label_ids == -100] = processor.tokenizer.pad_token_id\n",
        "    label_str = processor.batch_decode(label_ids, skip_special_tokens=True)\n",
        "\n",
        "    cer = cer_metric.compute(predictions=pred_str, references=label_str)\n",
        "\n",
        "    return cer"
      ],
      "execution_count": 27,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 473,
          "referenced_widgets": [
            "e4297a2c10e846b7a8dd67a0e675bc27",
            "a8c51dcfcd0e446b9e637a75cc6f1f4a",
            "530908dd92ce4fcc8ad0e4a3872018fd",
            "77ad0e900327449bbd84fa13ab836cb8",
            "3db97545836b48c7861c49e180120f2d",
            "fd851d6769c94ffba7824e7022edb5af",
            "ff3d0c0258bf430895a70e590491ee8b",
            "0aacf74aaf85475aaae9e399755b493b",
            "937ac0758b1d43918504dbd21dc240e4",
            "c5b9f7d529194837a2b39d68b28fcf1c",
            "ba707c27af6d42d3a172135ccb884a0c",
            "fe52ce398c58473d9c759e2d7c7de88a",
            "735997f4f6c3410498238e96ae319a7a",
            "822b7c76a120459793c167a3452e1609",
            "58d748c254684d91a815c2b681ec8f27",
            "1127b972710143dbb7f697721c6cd345",
            "dff31a75d9fb4398b9238653a76b34ed",
            "6ee36118724f47d499c2e3467631ec42",
            "ba2b94d5a0d747f0ac7a6bcd55f3b25a",
            "194bb6c1b1364fd9a548e64d138c6b15",
            "e2cbf6c7fca54b29b0adee917b52faa1",
            "36eae5bf2ad04abcbf29115102d4b182"
          ]
        },
        "id": "CzGJpRrl8qlk",
        "outputId": "cfb1db24-20f8-4ba8-eb44-1546da6e8e59"
      },
      "source": [
        "from transformers import AdamW\n",
        "from tqdm.notebook import tqdm\n",
        "\n",
        "optimizer = AdamW(model.parameters(), lr=5e-5)\n",
        "\n",
        "for epoch in range(10):  # loop over the dataset multiple times\n",
        "   # train\n",
        "   model.train()\n",
        "   train_loss = 0.0\n",
        "   for batch in tqdm(train_dataloader):\n",
        "      # get the inputs\n",
        "      for k,v in batch.items():\n",
        "        batch[k] = v.to(device)\n",
        "\n",
        "      # forward + backward + optimize\n",
        "      outputs = model(**batch)\n",
        "      loss = outputs.loss\n",
        "      loss.backward()\n",
        "      optimizer.step()\n",
        "      optimizer.zero_grad()\n",
        "\n",
        "      train_loss += loss.item()\n",
        "\n",
        "   print(f\"Loss after epoch {epoch}:\", train_loss/len(train_dataloader))\n",
        "    \n",
        "   # evaluate\n",
        "   model.eval()\n",
        "   valid_cer = 0.0\n",
        "   with torch.no_grad():\n",
        "     for batch in tqdm(eval_dataloader):\n",
        "       # run batch generation\n",
        "       outputs = model.generate(batch[\"pixel_values\"].to(device))\n",
        "       # compute metrics\n",
        "       cer = compute_cer(pred_ids=outputs, label_ids=batch[\"labels\"])\n",
        "       valid_cer += cer \n",
        "\n",
        "   print(\"Validation CER:\", valid_cer / len(eval_dataloader))\n",
        "\n",
        "model.save_pretrained(\".\")"
      ],
      "execution_count": 28,
      "outputs": [
        {
          "output_type": "display_data",
          "data": {
            "application/vnd.jupyter.widget-view+json": {
              "model_id": "e4297a2c10e846b7a8dd67a0e675bc27",
              "version_minor": 0,
              "version_major": 2
            },
            "text/plain": [
              "  0%|          | 0/146 [00:00<?, ?it/s]"
            ]
          },
          "metadata": {}
        },
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Validation CER: 0.5624370839885325\n"
          ]
        },
        {
          "output_type": "display_data",
          "data": {
            "application/vnd.jupyter.widget-view+json": {
              "model_id": "fe52ce398c58473d9c759e2d7c7de88a",
              "version_minor": 0,
              "version_major": 2
            },
            "text/plain": [
              "  0%|          | 0/146 [00:00<?, ?it/s]"
            ]
          },
          "metadata": {}
        },
        {
          "output_type": "error",
          "ename": "KeyboardInterrupt",
          "evalue": "ignored",
          "traceback": [
            "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
            "\u001b[0;31mKeyboardInterrupt\u001b[0m                         Traceback (most recent call last)",
            "\u001b[0;32m<ipython-input-28-4982dbe9882b>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[1;32m     30\u001b[0m      \u001b[0;32mfor\u001b[0m \u001b[0mbatch\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mtqdm\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0meval_dataloader\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     31\u001b[0m        \u001b[0;31m# run batch generation\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 32\u001b[0;31m        \u001b[0moutputs\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mmodel\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mgenerate\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mbatch\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m\"pixel_values\"\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mto\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdevice\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m     33\u001b[0m        \u001b[0;31m# compute metrics\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     34\u001b[0m        \u001b[0mcer\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mcompute_cer\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mpred_ids\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0moutputs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mlabel_ids\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mbatch\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m\"labels\"\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
            "\u001b[0;32m/usr/local/lib/python3.7/dist-packages/torch/autograd/grad_mode.py\u001b[0m in \u001b[0;36mdecorate_context\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m     26\u001b[0m         \u001b[0;32mdef\u001b[0m \u001b[0mdecorate_context\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     27\u001b[0m             \u001b[0;32mwith\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m__class__\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 28\u001b[0;31m                 \u001b[0;32mreturn\u001b[0m \u001b[0mfunc\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m     29\u001b[0m         \u001b[0;32mreturn\u001b[0m \u001b[0mcast\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mF\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mdecorate_context\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     30\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
            "\u001b[0;32m/usr/local/lib/python3.7/dist-packages/transformers/generation_utils.py\u001b[0m in \u001b[0;36mgenerate\u001b[0;34m(self, input_ids, max_length, min_length, do_sample, early_stopping, num_beams, temperature, top_k, top_p, repetition_penalty, bad_words_ids, bos_token_id, pad_token_id, eos_token_id, length_penalty, no_repeat_ngram_size, encoder_no_repeat_ngram_size, num_return_sequences, max_time, max_new_tokens, decoder_start_token_id, use_cache, num_beam_groups, diversity_penalty, prefix_allowed_tokens_fn, output_attentions, output_hidden_states, output_scores, return_dict_in_generate, forced_bos_token_id, forced_eos_token_id, remove_invalid_values, synced_gpus, **model_kwargs)\u001b[0m\n\u001b[1;32m   1062\u001b[0m                 \u001b[0mreturn_dict_in_generate\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mreturn_dict_in_generate\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   1063\u001b[0m                 \u001b[0msynced_gpus\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0msynced_gpus\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1064\u001b[0;31m                 \u001b[0;34m**\u001b[0m\u001b[0mmodel_kwargs\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m   1065\u001b[0m             )\n\u001b[1;32m   1066\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
            "\u001b[0;32m/usr/local/lib/python3.7/dist-packages/transformers/generation_utils.py\u001b[0m in \u001b[0;36mbeam_search\u001b[0;34m(self, input_ids, beam_scorer, logits_processor, stopping_criteria, max_length, pad_token_id, eos_token_id, output_attentions, output_hidden_states, output_scores, return_dict_in_generate, synced_gpus, **model_kwargs)\u001b[0m\n\u001b[1;32m   1808\u001b[0m             )  # (batch_size * num_beams, vocab_size)\n\u001b[1;32m   1809\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1810\u001b[0;31m             \u001b[0mnext_token_scores\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mlogits_processor\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0minput_ids\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mnext_token_scores\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m   1811\u001b[0m             \u001b[0mnext_token_scores\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mnext_token_scores\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0mbeam_scores\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mexpand_as\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mnext_token_scores\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   1812\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
            "\u001b[0;32m/usr/local/lib/python3.7/dist-packages/transformers/generation_logits_process.py\u001b[0m in \u001b[0;36m__call__\u001b[0;34m(self, input_ids, scores, **kwargs)\u001b[0m\n\u001b[1;32m     93\u001b[0m                 \u001b[0mscores\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mprocessor\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0minput_ids\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mscores\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     94\u001b[0m             \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 95\u001b[0;31m                 \u001b[0mscores\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mprocessor\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0minput_ids\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mscores\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m     96\u001b[0m         \u001b[0;32mreturn\u001b[0m \u001b[0mscores\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     97\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
            "\u001b[0;32m/usr/local/lib/python3.7/dist-packages/transformers/generation_logits_process.py\u001b[0m in \u001b[0;36m__call__\u001b[0;34m(self, input_ids, scores)\u001b[0m\n\u001b[1;32m    296\u001b[0m         \u001b[0mnum_batch_hypotheses\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mscores\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mshape\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    297\u001b[0m         \u001b[0mcur_len\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0minput_ids\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mshape\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 298\u001b[0;31m         \u001b[0mbanned_batch_tokens\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0m_calc_banned_ngram_tokens\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mngram_size\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0minput_ids\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mnum_batch_hypotheses\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcur_len\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m    299\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    300\u001b[0m         \u001b[0;32mfor\u001b[0m \u001b[0mi\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mbanned_tokens\u001b[0m \u001b[0;32min\u001b[0m \u001b[0menumerate\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mbanned_batch_tokens\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
            "\u001b[0;32m/usr/local/lib/python3.7/dist-packages/transformers/generation_logits_process.py\u001b[0m in \u001b[0;36m_calc_banned_ngram_tokens\u001b[0;34m(ngram_size, prev_input_ids, num_hypos, cur_len)\u001b[0m\n\u001b[1;32m    269\u001b[0m         \u001b[0;32mreturn\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0m_\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mrange\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mnum_hypos\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    270\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 271\u001b[0;31m     \u001b[0mgenerated_ngrams\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0m_get_ngrams\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mngram_size\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mprev_input_ids\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mnum_hypos\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m    272\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    273\u001b[0m     banned_tokens = [\n",
            "\u001b[0;32m/usr/local/lib/python3.7/dist-packages/transformers/generation_logits_process.py\u001b[0m in \u001b[0;36m_get_ngrams\u001b[0;34m(ngram_size, prev_input_ids, num_hypos)\u001b[0m\n\u001b[1;32m    246\u001b[0m     \u001b[0mgenerated_ngrams\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0;34m{\u001b[0m\u001b[0;34m}\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0m_\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mrange\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mnum_hypos\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    247\u001b[0m     \u001b[0;32mfor\u001b[0m \u001b[0midx\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mrange\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mnum_hypos\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 248\u001b[0;31m         \u001b[0mgen_tokens\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mprev_input_ids\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0midx\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtolist\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m    249\u001b[0m         \u001b[0mgenerated_ngram\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mgenerated_ngrams\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0midx\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    250\u001b[0m         \u001b[0;32mfor\u001b[0m \u001b[0mngram\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mzip\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mgen_tokens\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mi\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mi\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mrange\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mngram_size\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
            "\u001b[0;31mKeyboardInterrupt\u001b[0m: "
          ]
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "q8tduj2fBGQK"
      },
      "source": [
        "## Inference\n",
        "\n",
        "Note that after training, you can easily load the model using the .`from_pretrained(output_dir)` method.\n",
        "\n",
        "For inference on new images, I refer to my inference notebook, that can also be found in my [Transformers Tutorials repository](https://github.com/NielsRogge/Transformers-Tutorials) on Github."
      ]
    }
  ]
}